var enableCache = false;
var jsCache = new Array();
var dynamicContent_ajaxObjects = new Array();
function sack(file) {
    this.xmlhttp = null;
    this.resetData = function() {
        this.method = "POST";
        this.queryStringSeparator = "?";
        this.argumentSeparator = "&";
        this.URLString = "";
        this.encodeURIString = true;
        this.execute = false;
        this.element = null;
        this.elementObj = null;
        this.requestFile = file;
        this.vars = new Object();
        this.responseStatus = new Array(2);
        this.enablecaching = true;      
    };
    this.resetFunctions = function() {
        this.onLoading = function() { };
        this.onLoaded = function() { };
        this.onInteractive = function() { };
        this.onCompletion = function() { };
        this.onError = function() { };
        this.onFail = function() { };
    };
    this.reset = function() {
        this.resetFunctions();
        this.resetData();
    };
    this.createAJAX = function() {
        try {
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e1) {
            try {
                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                this.xmlhttp = null;
            }
        }
        if (! this.xmlhttp) {
            if (typeof XMLHttpRequest != "undefined") {
                this.xmlhttp = new XMLHttpRequest();
            } else {
                this.failed = true;
            }
        }
    };
    this.setVar = function(name, value){
        this.vars[name] = Array(value, false);
    };
    this.encVar = function(name, value, returnvars) {
        if (true == returnvars) {
            return Array(encodeURIComponent(name), encodeURIComponent(value));
        } else {
            this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
        }
    }
    this.processURLString = function(string, encode) {
        encoded = encodeURIComponent(this.argumentSeparator);
        regexp = new RegExp(this.argumentSeparator + "|" + encoded);
        varArray = string.split(regexp);
        for (i = 0; i < varArray.length; i++){
            urlVars = varArray[i].split("=");
            if (true == encode){
                this.encVar(urlVars[0], urlVars[1]);
            } else {
                this.setVar(urlVars[0], urlVars[1]);
            }
        }
    }
    this.createURLString = function(urlstring) {
        if (this.encodeURIString && this.URLString.length) {
            this.processURLString(this.URLString, true);
        }

        if (urlstring) {
            if (this.URLString.length) {
                this.URLString += this.argumentSeparator + urlstring;
            } else {
                this.URLString = urlstring;
            }
        }
        if (this.enablecaching == true) {
          // prevents caching of URLString
          this.setVar("rndval", new Date().getTime());
        }
        urlstringtemp = new Array();
        for (key in this.vars) {
            if (false == this.vars[key][1] && true == this.encodeURIString) {
                encoded = this.encVar(key, this.vars[key][0], true);
                delete this.vars[key];
                this.vars[encoded[0]] = Array(encoded[1], true);
                key = encoded[0];
            }
            urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
        }
        if (urlstring){
            this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
        } else {
            this.URLString += urlstringtemp.join(this.argumentSeparator);
        }
    }
    this.runResponse = function() {
        eval(this.response);
    }
    this.runAJAX = function(urlstring) {
        if (this.failed) {
            this.onFail();
        } else {
            this.createURLString(urlstring);
            if (this.element) {
                this.elementObj = document.getElementById(this.element);
            }
            if (this.xmlhttp) {
                var self = this;
                if (this.method == "GET") {
                    totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
                    this.xmlhttp.open(this.method, totalurlstring, true);
                } else {
                    this.xmlhttp.open(this.method, this.requestFile, true);
                    try {
                        this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
                    } catch (e) { }
                }

                this.xmlhttp.onreadystatechange = function() {
                    switch (self.xmlhttp.readyState) {
                        case 1:
                            self.onLoading();
                            break;
                        case 2:
                            self.onLoaded();
                            break;
                        case 3:
                            self.onInteractive();
                            break;
                        case 4:
                            self.response = self.xmlhttp.responseText;
                            self.responseXML = self.xmlhttp.responseXML;
                            self.responseStatus[0] = self.xmlhttp.status;
                            self.responseStatus[1] = self.xmlhttp.statusText;
                            if (self.execute) {
                                self.runResponse();
                            }
                            if (self.elementObj) {
                                elemNodeName = self.elementObj.nodeName;
                                elemNodeName.toLowerCase();
                                if (elemNodeName == "input"
                                || elemNodeName == "select"
                                || elemNodeName == "option"
                                || elemNodeName == "textarea") {
                                    self.elementObj.value = self.response;
                                } else {
                                    self.elementObj.innerHTML = self.response;
                                }
                            }
                            if (self.responseStatus[0] == "200") {
                                self.onCompletion();
                            } else {
                                self.onError();
                            }
                            self.URLString = "";
                            break;
                    }
                };
                this.xmlhttp.send(this.URLString);
            }
        }
    };

    this.reset();
    this.createAJAX();
}
function ajax_showContent(divId,ajaxIndex,url)
{
    var targetObj = document.getElementById(divId);
    if(dynamicContent_ajaxObjects[ajaxIndex]){
    targetObj.innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;
    if(enableCache){
        jsCache[url] =  dynamicContent_ajaxObjects[ajaxIndex].response;
    }
    }
    dynamicContent_ajaxObjects[ajaxIndex] = false;
    
    ajax_parseJs(targetObj);
    evaluateCss(targetObj);   
    if(document.getElementById('askWidget')){
    document.getElementById('askWidget').setAttribute("class","wdh100");
    document.getElementById('askWidget').style.background = '';
    document.getElementById('askWidget').style.width = "";
    document.getElementById('askWidget').style.height = "";
    }
}
function ajax_loadContent(divId,url)
{
    try{
        if(enableCache && jsCache[url]){
            document.getElementById(divId).innerHTML = jsCache[url];
            return;
        }
        
        var ajaxIndex = dynamicContent_ajaxObjects.length;
        /*
        document.getElementById(divId).innerHTML = 'Loading content - please wait';
        */
        dynamicContent_ajaxObjects[ajaxIndex] = new sack();
        dynamicContent_ajaxObjects[ajaxIndex].requestFile = url;    // Specifying which file to get
        dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function(){ ajax_showContent(divId,ajaxIndex,url); };  // Specify function that will be executed after file has been found
        dynamicContent_ajaxObjects[ajaxIndex].runAJAX();        // Execute AJAX function    
    } catch (ex){
    
    }
    
}
function ajax_parseJs(obj)
{
    var scriptTags = obj.getElementsByTagName('SCRIPT');
    var string = '';
    var jsCode = '';
    for(var no=0;no<scriptTags.length;no++){    
        if(scriptTags[no].src){
            var head = document.getElementsByTagName("head")[0];
            var scriptObj = document.createElement("script");
    
            scriptObj.setAttribute("type", "text/javascript");
            scriptObj.setAttribute("src", scriptTags[no].src);      
        }else{
            if(navigator.userAgent.indexOf('Opera')>=0){
                jsCode = jsCode + scriptTags[no].text + '\n';
            }
            else
                jsCode = jsCode + scriptTags[no].innerHTML; 
        }
        
    }

    if(jsCode)ajax_installScript(jsCode);
}
function evaluateCss(obj) 
{ 
   var cssTags = obj.getElementsByTagName('STYLE'); 
   var head = document.getElementsByTagName('HEAD')[0]; 
   for(var no=0;no<cssTags.length;no++){ 
      head.appendChild(cssTags[no]); 
   }    
}
function ajax_installScript(script)
{       
    if (!script)
        return;     
    if (window.execScript){         
        window.execScript(script)
    }else if(window.jQuery && jQuery.browser.safari){ // safari detection in jQuery
        window.setTimeout(script,0);
    }else{          
        window.setTimeout( script, 0 );
    } 
}
DHTML_modalMessage = function()
{
    var url;                                // url of modal message
    var htmlOfModalMessage;                 // html of modal message
    
    var divs_transparentDiv;                // Transparent div covering page content
    var divs_content;                       // Modal message div.
    var iframe;                             // Iframe used in ie
    var layoutCss;                          // Name of css file;
    var width;                              // Width of message box
    var height;                             // Height of message box
    
    var existingBodyOverFlowStyle;          // Existing body overflow css
    var dynContentObj;                      // Reference to dynamic content object
    var cssClassOfMessageBox;               // Alternative css class of message box - in case you want a different appearance on one of them
    var shadowDivVisible;                   // Shadow div visible ?
    var shadowOffset;                       // X and Y offset of shadow(pixels from content box)
    var MSIE;
    var HardCodeHeight;
    var ShowLoaderAjax;   
        
    this.HardCodeHeight = 30;      
    this.url = '';                          // Default url is blank
    this.htmlOfModalMessage = '';           // Default message is blank
    this.layoutCss = 'modal-message.css';   // Default CSS file
    this.height = 200;                      // Default height of modal message
    this.width = 400;                       // Default width of modal message
    this.cssClassOfMessageBox = false;      // Default alternative css class for the message box
    this.shadowDivVisible = false;          // Shadow div is visible by default
    this.shadowOffset = 5;                  // Default shadow offset.
    this.MSIE = false;
    this.ShowLoaderAjax = false;   
    if(navigator.userAgent.indexOf('MSIE')>=0) this.MSIE = true;
}

DHTML_modalMessage.prototype = {
    
    setSource : function(urlOfSource)
    {
        this.url = urlOfSource;
        
    }
    ,
    setFlagShowLoaderAjax : function (val)
    {
       this.ShowLoaderAjax = val;
    }   
    ,
    setHardCodeHeight : function (h)
    {
       this.HardCodeHeight = h;
    }
    ,     
    setHtmlContent : function(newHtmlContent)
    {
        this.htmlOfModalMessage = newHtmlContent;
        
    }
    ,
    setSize : function(width,height)
    {
        if(width)this.width = width;
        if(height)this.height = height;
    }
    ,
    setCssClassMessageBox : function(newCssClass)
    {
        this.cssClassOfMessageBox = newCssClass;
        if(this.divs_content){
            if(this.cssClassOfMessageBox)
                this.divs_content.className=this.cssClassOfMessageBox;
            else
                this.divs_content.className='modalDialog_contentDiv';
        }
                    
    }
    ,
    setShadowOffset : function(newShadowOffset)
    {
        this.shadowOffset = newShadowOffset
                    
    }
    ,
    display : function()
    {
        if(!this.divs_transparentDiv){
            this.__createDivs();
        }
        this.divs_transparentDiv.style.display='block';
        this.divs_content.style.display='block';
        if(this.MSIE)this.iframe.style.display='block';
        this.__resizeDivs();
        window.refToThisModalBoxObj = this;
        setTimeout('window.refToThisModalBoxObj.__resizeDivs()',150);
        /*
	if (this.ShowLoaderAjax) {
            document.getElementById('DHTMLSuite_modalBox_contentDiv').innerHTML = '<p align="center"><img src="/public/images/loader.gif" border="0" />&nbsp;<br/>Please Wait ...</p>';
        }
	*/
        this.__insertContent();
    }
    ,
    setShadowDivVisible : function(visible)
    {
        this.shadowDivVisible = visible;
    }
    ,
    close : function()
    {
	try{
        /* Hiding divs */
	document.getElementById('DHTMLSuite_modalBox_contentDiv').innerHTML="";
	this.divs_transparentDiv.style.display='none';
        this.divs_content.style.display='none';
        if(this.MSIE)this.iframe.style.display='none';
	} catch (e) {
		//alert(e);
	}
        
    }
    ,
    addEvent : function(whichObject,eventType,functionName,suffix)
    {
      if(!suffix)suffix = '';
      if(whichObject.attachEvent){
        whichObject['e'+eventType+functionName+suffix] = functionName;
        whichObject[eventType+functionName+suffix] = function(){whichObject['e'+eventType+functionName+suffix]( window.event );}
        whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName+suffix] );
      } else
        whichObject.addEventListener(eventType,functionName,false);
    }
    ,
    __createDivs : function()
    {
        // Creating transparent div
        this.divs_transparentDiv = document.createElement('DIV');
        this.divs_transparentDiv.className='modalDialog_transparentDivs';
        this.divs_transparentDiv.id = 'DHTMLSuite_modalBox_transparentDiv';
        this.divs_transparentDiv.style.left = '0 px';
        this.divs_transparentDiv.style.top = '0 px';
        if (document.getElementById("hack_ie_operation_aborted_error")) {
                document.getElementById("hack_ie_operation_aborted_error").appendChild(this.divs_transparentDiv);
        } else {
               document.body.appendChild(this.divs_transparentDiv);
        }  
        
        // Creating content div
        this.divs_content = document.createElement('DIV');
        this.divs_content.className = 'modalDialog_contentDiv';
        this.divs_content.id = 'DHTMLSuite_modalBox_contentDiv';
        this.divs_content.style.zIndex = 100000;
        
        if(this.MSIE){
            this.iframe = document.createElement('<IFRAME id= "modalDialog_content_iframe" src="about:blank" height=0 frameborder=0>');
            this.iframe.style.zIndex = 90000;
            this.iframe.style.position = 'absolute';
            this.iframe.style.height = document.body.scrollHeight+ 'px';
            this.iframe.style.width = (document.body.offsetWidth  ) + 'px';
            this.iframe.style.left= '0px';
            this.iframe.style.top= '0px';
            this.iframe.style.filter = 'alpha(opacity=0)';
            this.iframe.width = (document.body.offsetWidth  ) + 'px';
            if (document.getElementById("hack_ie_operation_aborted_error")) {         
                 document.getElementById("hack_ie_operation_aborted_error").appendChild(this.iframe);
            } else {
                document.body.appendChild(this.iframe);    
            }         
        }
        if (document.getElementById("hack_ie_operation_aborted_error")) {       
              document.getElementById("hack_ie_operation_aborted_error").appendChild(this.divs_content);
        } else {
              document.body.appendChild(this.divs_content);
        }      
        window.refToModMessage = this;
        window.refToModMessage.__repositionTransparentDiv();
        this.addEvent(window,'resize',function(e){ window.refToModMessage.__repositionTransparentDiv() });
    }
    ,
    __getBrowserSize : function()
    {
        
        var myWidth = 0;
        var myHeight = 0;
        if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
            myWidth = window.innerWidth;
            myHeight = window.innerHeight;
        } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
            //IE 6+ in 'standards compliant mode'
            myWidth = document.documentElement.clientWidth;
            myHeight = document.documentElement.clientHeight;
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
            //IE 4 compatible
            myWidth = document.body.clientWidth;
            myHeight = document.body.clientHeight;
        }
        return [myWidth,myHeight];
    }
    ,
    __resizeDivs : function()
    {
        
        var topOffset = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
        
        // add some height
        topOffset = topOffset - this.HardCodeHeight ;

        if(this.cssClassOfMessageBox)
            this.divs_content.className=this.cssClassOfMessageBox;
        else
            this.divs_content.className='modalDialog_contentDiv';
                    
        if(!this.divs_transparentDiv)return;
        var st = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
        var sl = Math.max(document.body.scrollLeft,document.documentElement.scrollLeft);
        window.scrollTo(sl,st);
        setTimeout('window.scrollTo(' + sl + ',' + st + ');',10);
        
        var brSize = this.__getBrowserSize();
        var bodyWidth = brSize[0];
        var bodyHeight = brSize[1];
        
        // Setting width and height of content div
      
        this.divs_content.style.width = this.width + 'px';
        //this.divs_content.style.height= this.height + 'px';
        /* Dynamic height */
        
        // Creating temporary width variables since the actual width of the content div could be larger than this.width and this.height(i.e. padding and border)
        
        var tmpWidth = this.divs_content.offsetWidth;
        var tmpHeight = this.height;
        this.divs_content.style.left = Math.ceil((bodyWidth - tmpWidth) / 2) + 'px';
        this.divs_content.style.top = (Math.ceil((bodyHeight - tmpHeight) / 2) +  ( topOffset - this.HardCodeHeight )) + 'px';    
    }
    ,
    __repositionTransparentDiv : function()
    {
        this.divs_transparentDiv.style.top = 0 + 'px';
        this.divs_transparentDiv.style.left = 0 + 'px';
        var brSize = this.__getBrowserSize();
        var bodyWidth = brSize[0];
        var bodyHeight = brSize[1];
        if (document.body.offsetWidth) {
        this.divs_transparentDiv.style.width = document.body.offsetWidth + 'px';
        } else {
        this.divs_transparentDiv.style.width = bodyWidth + 'px';
        }
        if (document.body.offsetHeight) {
        this.divs_transparentDiv.style.height = document.body.offsetHeight + 'px';
        } else {
        this.divs_transparentDiv.style.height = bodyHeight + 'px';
        }
    }
    ,
    __insertContent : function()
    {
        if(this.url){
            ajax_loadContent('DHTMLSuite_modalBox_contentDiv',this.url);
        }else{
            this.divs_content.innerHTML = this.htmlOfModalMessage;
        }
    }
}
